#include <iostream>
class Student;
using namespace std;


// class Person
// {
// public:
//     void Print()
//     {
//         cout << "Name: " << _name << endl;
//         cout << "Age: " << _age << endl;
//     }
// protected:
//     string _name = "John Doe";
//     int _age = 18;
// };
//
// class Student : public Person
// {
// public:
//     void Print()
//     {
//         Person::Print();
//         cout << "Student ID: " << _studentID << endl;
//     }
// private:
//     int _studentID = 123456789;
// };
//
// class Teacher : public Person
// {
// public:
//     void Print()
//     {
//         Person::Print();
//         cout << "Teacher ID: " << _teacherID << endl;
//     }
// private:
//     int _teacherID = 987654321;
// };
//
// int main()
// {
//     Student student;
//     student.Print();
//     Teacher teacher;
//     teacher.Print();
//     return 0;
// }

// class Person
// {
// public:
//     string _name;
//     string _sex;
//     int _age{};
// };
//
// class Student : public Person
// {
// public:
//     int _num{};
// };
//
// void test()
// {
//     Student s;
//     Person p = s;
//     Person* pp = &s;
//     Person& pr = s;
//
//     Student* sp = &p;
//     pr._name = "John Doe";
//     cout << p._name << endl;
//
// }
//
// int main()
// {
//     test();
//     return 0;
// }
//
// // void test2()
// // {
// //     int i = 0;
// //     const double& d = i;
// // }

// class Person
// {
// protected:
//     string _name = "John Doe";
//     int _num = 123;//身份证号
// };
//
// class Student : public Person
// {
// public:
//     void Print()
//     {
//         cout << "Name: " << _name << endl;
//         cout << "身份证号: " << _num << endl;
//         cout << "学号" << Person::_num << endl;
//     }
// protected:
//     int _num = 456789;//学号
// };
//
// void test()
// {
//     Student s;
//     s.Print();
// }
//
// int main()
// {
//     test();
//     return 0;
// }

// class A
// {
// public:
//     void func()
//     {
//         cout << "A::func()" << endl;
//     }
// };
//
// class B : public A
// {
// public:
//     void func(int i)
//     {
//         A::func();
//         cout << "B::func(int i)->" << i << endl;
//     }
// };
//
// void test()
// {
//     B b;
//     b.func(123);
// }

// class Person
// {
// public:
//     Person(const char* name = "John Doe")
//         : _name(name)
//     {
//         cout << "Person::Person()" << endl;
//     }
//
//     ~Person()
//     {
//         cout << "Person::~Person()" << endl;
//     }
//
//     Person(const Person& p)
//         : _name(p._name)
//     {
//         cout << "Person::Person(const Person& p)" << endl;
//     }
//
//     Person& operator=(const Person& p)
//     {
//         cout << "Person::operator=(const Person& p)" << endl;
//         if (this != &p)
//         {
//             _name = p._name;
//         }
//         return *this;
//     }
// protected:
//     string _name;
// };
//
// class Student : public Person
// {
// public:
//     Student(const char* name, int num)
//         : Person(name)
//         , _num(num)
//     {
//         cout << "Student::Student()" << endl;
//     }
//
//     ~Student()
//     {
//         cout << "Student::~Student()" << endl;
//     }
//
//     Student(const Student& s)
//         : Person(s)
//         , _num(s._num)
//     {
//         cout << "Student::Student(const Student& s)" << endl;
//     }
//
//     Student& operator=(const Student& s)
//     {
//         cout << "Student::operator=(const Student& s)" << endl;
//         if (this != &s)
//         {
//             Person::operator=(s);
//             _num = s._num;
//         }
//         return *this;
//     }
//
// protected:
//     int _num;
// };
//
// void test()
// {
//     Student s1("John Doe", 123);
//     Student s2(s1);
//     Student s3("rose", 18);
//     s1 = s3;
// }
//
// int main()
// {
//     test();
//     return 0;
// }

// class Person
// {
// public:
//     friend void Display(const Person& p, const Student& s);
// protected:
//     string _name;
// };
//
// class Student : public Person
// {
// protected:
//     int _num;
// };
//
// void Display(const Person& p, const Student& s)
// {
//     cout << p._name << endl;
//     cout << s._num << endl;
// }

// class Person
// {
// public:
//     string _name;
// };
//
// class Student : virtual public Person
// {
// protected:
//     int _num;
// };
//
// class Teacher : virtual public Person
// {
// protected:
//     int _id;
// };
//
// class StudentTeacher : public Student, public Teacher
// {
// protected:
//     string _class;
// };
// int main()
// {
//     StudentTeacher st;
//     st._name = "John Doe";
// }

// class A
// {
// public:
//     int _a;
// };
//
// class B : virtual public A
// {
// public:
//     int _b;
// };
//
// class C : virtual public A
// {
// public:
//     int _c;
// };
//
// class D : public B, public C
// {
// public:
//     int _d;
// };
//
// int main()
// {
//     D d;
//
//     d.B::_a = 1;
//     d.C::_a = 2;
//     d._b = 3;
//     d._c = 4;
//     d._d = 5;
//
//     return 0;
// }

